本章课程PDF,视频(油管B站)。

SVM有两大特色:Hinge Loss和Kernel Method。

Hinge Loss

损失函数使用$\delta()$函数计算时,$\delta()$函数不可微分,无法使用Gradient Descent求解。可以使用近似的其他函数代替$\delta()$函数。

图中横轴是$\hat{y}f(x)$ ,希望$\hat{y}=+1$时,$f(x)$越正越好,$\hat{y}=−1$时,$f(x)$越负越好。即$\hat{y}f(x)$越大,损失函数越小。Ideal loss是两者同向为0,反向为1。可微分的损失函数可以自己选。

红色线是Square Loss,是不合理的,$\hat{y}f(x)$很大时,损失函数很大。

蓝色线是Sigmoid + Square Loss。对$l(f(x^n),\hat{y})$ , 代入$y^n=±1$,可以理解公式的合理性。逻辑回归时不会用square loss,因为它的performance不好,实际用cross entropy。

绿色线是Sigmoid + cross entropy。指的是$\sigma(f(x)),1−\sigma(f(x))$这个分布,与ground truth这一分布之间的cross entropy,这是最小化的目标。这时的损失函数$l(f(x^n),\hat{y}^n)$是合理的,这里可以除以ln2,就可以变成ideal loss的up-bound,通过最小化ideal loss的up-bound来最小化ideal loss。比较绿线和蓝线,可知道为什么在逻辑回归时要用cross entropy作为损失函数,而不用square loss:$\hat{y}f(x)$从-2变到-1时,蓝色线变化很小,绿色线变化很大;$\hat{y}f(x)$很负时,应该朝正方向调整,但对蓝色线来讲调整没有大的回报,而对绿色线调整有较大的回报。所以用逻辑回归的时候,经常使用cross entropy。

紫色线是Hinge Loss。损失函数$l(f(x^n),\hat{y}^n)$中的“1”可以使曲线过(0,1)(1,0)点,才会是ideal loss的一个type的upper bound, 可以通过最小化hinge loss来得到最小化ideal loss的效果。Hinge loss是一个”及格就好“的函数,只要值打过margin,它就不会想要做得更好。Hinge Loss与Sigmoid + cross entropy相比,区别在于对待已经做好的样本的态度:当$\hat{y}f(x)$从1变成2时,前者loss不降,及格就好;后者loss下降,还想要更好。在实践中其实相差不多,Hinge Loss可能会微胜Sigmoid + cross entropy。Hinge loss的好处是不害怕outlier,学习出的结果比较具有鲁棒性,下面讲kernel时会明显看到这一点。

Linear SVM

Linear SVM的function是linear的,如图中公式所示,当$f(x)>0$时,x属于class 1, 当$f(x)<0$时,x属于class 2。

Linear SVM的loss function是hinge loss + 正则项,因为hinge loss和正则项都是convex的,所以loss function整体也是convex的。曲线有棱棱角角也是可微分的。 可以用Gradient Descent求解。

Linear SVM与Logistic regression 区别只在于损失函数不同,前者的损失函数是hinge loss,后者的损失函数是cross entropy。

Linear SVM – gradient descent

SVM可以用Gradient Descent来解,公式推导如上图。

Linear SVM – another formulation

将$l(f(x^n),\hat{y})$记作$\varepsilon^n$。

上下两个方框本是不等价的(上面可以推出下面,但是下面不能推出上面),但是加上“Minimizing loss function $L$”之后二者就等价了。下面就是常见的SVM的约束,$\varepsilon^n$是松弛因子,$\varepsilon^n$不能是负的,否则就不是松弛的。这是一个二次规划问题,可代入QP solver求解或用gradient descent求解。

Kernel Method

Dual Representation

最小化损失函数的权重参数$w^∗$可以表示为数据点$x^n$的线性组合。一般用拉格朗日乘子法解释这一结论,这里从另外的角度解释:之前说过,Linear SVM可以用gradient descent来更新参数,根据前面得到的公式,每次更新权重都加上$x^n$的线性组合,那么如果$w$初始化为0向量的话,得到的$w^∗$就是$x^n$的线性组合。其中的权重$c^n(w)$是损失函数$l(f(x^n),\hat{y})$对$f(x^n)$的偏导数,由于损失函数采用的是Hinge Loss,所以有的$c^n(w)$就是0,可能会有数据点对应的$\alpha^$等于0,从而$\alpha^_n$是sparse的,具有非零$\alpha^*_n$的数据点$x^n$是支持向量。这样的好处是模型比较鲁棒,不是支持向量的数据点,就算去掉也不会对结果有影响,奇怪的outlier只要不是支持向量,就不会对结果有影响。Logistic regression用cross entropy作损失函数,它在更新参数时的权重就不sparse,所以每笔data都对结果有影响。


把$w$写成$x^n$的线性组合,最大的好处是可以使用Kernel trick。根据$w=Xα$,$f(x)$可写为$f(x)=Σ_n\alpha_n(x^n⋅x)$,由于用的损失函数是Hinge Loss, 所以$\alpha_n$是sparse的,只需要算支持向量与数据点$x$之间的内积即可。 可以把内积$(x^n⋅x)$(写作Kernel function $K(x^n,x)$。这样,整体损失函数可以改写为图中的式子,我们不需要知道$x$,只需要知道Kernel function $K(x^n,x)$即可,这就叫Kernel trick。Kernel trick不只可用于SVM,也可用于logistic regression, linear regression等。(图中”project”应改为”product”)

Kernel Trick


直接计算核函数有时候会比“特征变换+计算内积”快。

$x$与$z$越像,则$K(x,z)$越大。它是两个无穷维特征向量的内积。将核函数展开并使用泰勒级数,可见核函数是无穷项之和,每项都可写成内积形式,将与$x$,$z$有关的向量分别串起来,得到两个无穷维的向量,这两个向量的内积就是RBF Kernel。由于使用了无穷维的特征,在用RBF Kernel时要小心overfitting,可能在training data 上得到很好的performance, 而在testing data 上得到很糟的performance。

Sigmoid Kernel可看做一个单隐层网络,neuron个数就是支持向量的个数,neuron权重就是某一笔data。

Deep Learning vs SVM

Deep Learning的前几个layer可以看成Feature transformation,最后一个layer可以看作Linear Classifier。SVM先应用一个Kernel Function,把feature转到高维上面,在高维空间上面应用Linear Classifier,在SVM里面一般Linear Classifier会用Hinge Loss。

事实上,SVM的kernel是learnable,但没有办法learn的像Deep Learning那么多。可以有好几个不同的kernel,然后把不同kernel连接起来,它们中间的权重是可以学出来的。当只有一个kernel的时候,SVM就好像只有一个隐藏层的Neural Network,当把kernel做线性组合的时候,就好像一个有两个layer的Neural Network。

如果本博文对您有帮助,可以赞助支持一波博主~